import { createRouter, createWebHistory } from 'vue-router'
import { ElMessage } from 'element-plus'
import HomeView from '../views/HomeView.vue'
import Login from '../components/Login.vue'
import ProfileView from '../views/ProfileView.vue'
import UserCenterView from '../views/UserCenterView.vue'

// 路由规则配置
const routes = [
  {
    path: '/',
    name: 'home',
    component: HomeView,
    meta: { requiresAuth: true } // 需要登录才能访问
  },
  {
    path: '/login',
    name: 'login',
    component: Login,
    meta: { requiresAuth: false } // 无需登录
  },
  {
    path: '/profile',
    name: 'profile',
    component: ProfileView,
    meta: { requiresAuth: true } // 需要登录才能访问
  },
  {
    path: '/user-center',
    name: 'user-center',
    component: UserCenterView,
    meta: { 
      requiresAuth: true,  // 需要登录
      requiresAdmin: true  // 需要管理员权限
    }
  },
  // 404页面重定向到首页（优化：可单独创建404页面提升体验）
  {
    path: '/:pathMatch(.*)*',
    name: 'NotFound',
    // component: () => import('../views/NotFound.vue'), // 推荐：创建单独404页面
    redirect: '/'
  }
]

// 创建路由实例
const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes
})

// 路由守卫：权限控制
router.beforeEach((to, from, next) => {
  const token = localStorage.getItem('token')
  // 优化1：用户信息解析容错，避免JSON.parse失败
  let userInfo = null
  try {
    const userInfoStr = localStorage.getItem('userInfo')
    userInfo = userInfoStr ? JSON.parse(userInfoStr) : null
  } catch (error) {
    console.error('解析用户信息失败:', error)
    // 解析失败时清空本地存储，强制重新登录
    localStorage.removeItem('userInfo')
    localStorage.removeItem('token')
  }

  // 1. 处理需要登录的路由
  if (to.meta.requiresAuth) {
    // 优化2：增加Token有效性简单判断（结合后端JWT有效期，示例为30分钟）
    const isTokenValid = () => {
      if (!token) return false
      // 若后端返回Token过期时间，可在此处对比时间戳
      // 此处简化为“存在即有效”，实际项目建议结合后端逻辑
      return true
    }

    if (!isTokenValid()) {
      ElMessage.warning('请先登录或登录已过期')
      // 清除无效Token和用户信息
      localStorage.removeItem('token')
      localStorage.removeItem('userInfo')
      next('/login')
      return
    }
  }

  // 2. 已登录状态下，禁止访问登录页（优化：保留从首页跳转的可能性）
  if (to.path === '/login' && token) {
    // 若从非首页跳转，提示后返回来源页；否则返回首页
    const redirectPath = from.path !== '/' && from.path !== '/login' ? from.path : '/'
    ElMessage.info('您已登录，无需重复登录')
    next(redirectPath)
    return
  }

  // 3. 处理需要管理员权限的路由
  if (to.meta.requiresAdmin) {
    // 优化3：细化权限判断逻辑，区分“未登录”和“非管理员”
    if (!token) {
      ElMessage.warning('请先登录管理员账号')
      next('/login')
    } else if (userInfo?.userRole?.toUpperCase() !== 'ADMIN') {
      ElMessage.error('无管理员权限，仅管理员可访问')
      next('/')
    } else {
      next()
    }
    return
  }

  // 4. 其他情况直接放行
  next()
})

export default router